//
//  YMConversationListViewController.h
//  YMIM
//
//  Created by reyzhang on 2022/3/21.
//

#import "YMIMBaseViewController.h"
#import <YMIMLib/YMIMLib.h>
#import "YMConversationBaseTableCell.h"
#import "YMConversationCell.h"

NS_ASSUME_NONNULL_BEGIN

@interface YMConversationListViewController : YMIMBaseViewController

/**
 * 列表中需要显示的会话类型数组
 * 数组中的元素为YMConversationType转换的NSNumber
 */
@property (nonatomic, strong) NSArray *displayConversationTypeArray;

/**
 * 会话分组
 */
@property (nonatomic, assign) NSInteger label;

/**
 * 列表的TableView
 */
@property (nonatomic, strong) UITableView *conversationListTableView;

/**
 * 列表为空时显示的View
 */
@property (nonatomic, strong) UIView *emptyConversationView;

/**
 * 会话列表页面是否处于 appear 状态
 */
@property (nonatomic, assign) BOOL isConverstaionListAppear;

/**
 * 会话的数据源
 */
@property (nonatomic, strong) NSMutableArray *dataArray;


/**
 * 初始化
 * @param displayConversationTypeArray  显示的会话类型
 * @param label 分组会话
 */
- (instancetype)initWithDisplayConversationTypes:(NSArray *)displayConversationTypeArray label:(NSInteger)label;

- (instancetype)initWithDisplayConversationTypes:(NSArray *)displayConversationTypeArray;




#pragma mark 对外的勾子方法（父类方法，允许被子类重写）

/**
 获取数据时，使用菊花组件
 */
- (void)startShowHUD;

/**
 数据获取后，隐藏菊花组件
 */
- (void)endHideHUD;


/**
 * 对外公开 获取会话后的数据拦截。 可进行数据加工处理
 */
- (NSMutableArray<YMConversation *> *)willReloadTableData:(NSMutableArray<YMConversation *> *)dataSource;


/**
 * 对外公开， cell已创建，用来配置cell样式
 */
- (void)willDisplayConversationTableCell:(YMConversationBaseTableCell *)cell
                             atIndexPath:(NSIndexPath *)indexPath;


/**
 * 对外公开获取cell高度的方法
 */
- (CGFloat)ymConversationListTableView:(UITableView *)tableView
               heightForRowAtIndexPath:(NSIndexPath *)indexPath;

/**
 * 对外公开，cell被选中后的事件处理
 */
- (void)onSelectedTableRow:(UITableView *)tableView
         conversationModel:(YMConversation *)model
               atIndexPath:(NSIndexPath *)indexPath;

/**
 * 对外公开，cell删除后的事件处理
 */
- (void)onDeletedTableRowAtIndexPath:(NSIndexPath *)indexPath;


/**
 * 刷新数据源
 */
- (void)refreshConversationTableViewIfNeeded;



@end

NS_ASSUME_NONNULL_END
